import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let buttonsItems = [
    {
        "label": "Button_Create",
        "insertText": dedent`
        GUI:Button_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:nimg})
        `,
        "documentation": dedent`# 创建按钮
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型   | 注释        |
        | :----- | :--- | :----- | :---------- |
        | parent | 是   | obj    | 父节点对象  |
        | ID     | 是   | string | 唯一ID      |
        | x      | 是   | int    | 位置 横坐标 |
        | y      | 是   | int    | 位置 纵坐标 |
        | nimg   | 是   | string | 图片路径    |

        - 示例代码

        \`\`\`
        local BtnOk = GUI:Button_Create(FrameLayout, "BtnOk", 0, 0, "res/public/1900000611.png")
        GUI:setAnchorPoint(BtnOk, { x = 0.5, y = 0.5 })
        GUI:Button_setTitleText(BtnOk, "确定")
        GUI:Button_setTitleFontSize(BtnOk, 16)
        GUI:addOnClickEvent(BtnOk, function()
            -- do something
        end)
        \`\`\`
        `
    },
    {
        "label": "Button_loadTextures",
        "insertText": dedent`
        GUI:Button_loadTextures(\${1:widget}, \${2:Normalfilepath}, \${3:Pressedfilepath}, \${4:Disabledfilepath}, \${5:TextureType})
        `,
        "documentation": dedent`# 设置按钮状态图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数             | 必选 | 类型   | 注释                                 |
        | :--------------- | :--- | :----- | :----------------------------------- |
        | widget           | 是   | obj    | 按钮对象                             |
        | Normalfilepath   | 是   | string | 正常状态图片路径                     |
        | Pressedfilepath  | 否   | string | 按压状态图片路径                     |
        | Disabledfilepath | 否   | string | 禁用状态图片路径                     |
        | TextureType      | 否   | int    | 加载类型： 0 图片 1 图片集 plist文件 |

        `
    },
    {
        "label": "Button_loadTextureNormal",
        "insertText": dedent`
        GUI:Button_loadTextureNormal(\${1:widget}, \${2:filepath})
        `,
        "documentation": dedent`# 设置正常状态图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数     | 必选 | 类型   | 注释     |
        | :------- | :--- | :----- | :------- |
        | widget   | 是   | obj    | 按钮对象 |
        | filepath | 是   | string | 图片路径 |

        `
    },
    {
        "label": "Button_loadTexturePressed",
        "insertText": dedent`
        GUI:Button_loadTexturePressed(\${1:widget}, \${2:filepath})
        `,
        "documentation": dedent`# 设置按下状态图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数     | 必选 | 类型   | 注释     |
        | :------- | :--- | :----- | :------- |
        | widget   | 是   | obj    | 按钮对象 |
        | filepath | 是   | string | 图片路径 |

        `
    },
    {
        "label": "Button_loadTextureDisabled",
        "insertText": dedent`
        GUI:Button_loadTextureDisabled(\${1:widget}, \${2:filepath})
        `,
        "documentation": dedent`# 设置禁用状态图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数     | 必选 | 类型   | 注释     |
        | :------- | :--- | :----- | :------- |
        | widget   | 是   | obj    | 按钮对象 |
        | filepath | 是   | string | 图片路径 |

        `
    },
    {
        "label": "Button_setTitleText",
        "insertText": dedent`
        GUI:Button_setTitleText(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮文字
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型   | 注释         |
        | :----- | :--- | :----- | :----------- |
        | widget | 是   | obj    | 按钮对象     |
        | value  | 是   | string | 按钮显示文本 |

        `
    },
    {
        "label": "Button_getTitleText",
        "insertText": dedent`
        GUI:Button_getTitleText(\${1:widget})
        `,
        "documentation": dedent`# 获取按钮文字
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 按钮对象 |

        `
    },
    {
        "label": "Button_setTitleColor",
        "insertText": dedent`
        GUI:Button_setTitleColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮文字颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 按钮对象        |
        | value  | 是   | string | 色值（#000000） |

        `
    },
    {
        "label": "Button_setTitleFontSize",
        "insertText": dedent`
        GUI:Button_setTitleFontSize(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮文字大小
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释               |
        | :----- | :--- | :--- | :----------------- |
        | widget | 是   | obj  | 按钮对象           |
        | value  | 是   | int  | 字体大小（字号16） |

        `
    },
    {
        "label": "Button_setTitleFontName",
        "insertText": dedent`
        GUI:Button_setTitleFontName(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮文字样式
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型   | 注释                 |
        | :----- | :--- | :----- | :------------------- |
        | widget | 是   | obj    | 按钮对象             |
        | value  | 是   | string | 字体样式（font.ttf） |

        `
    },
    {
        "label": "Button_setMaxLineWidth",
        "insertText": dedent`
        GUI:Button_setMaxLineWidth(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮文本最大宽度
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释         |
        | :----- | :--- | :--- | :----------- |
        | widget | 是   | obj  | 按钮对象     |
        | value  | 是   | int  | 文本最大宽度 |

        `
    },
    {
        "label": "Button_titleEnableOutline",
        "insertText": dedent`
        GUI:Button_titleEnableOutline(\${1:widget}, \${2:color}, \${3:outline})
        `,
        "documentation": dedent`# 设置按钮文本加描边
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数    | 必选 | 类型   | 注释                |
        | :------ | :--- | :----- | :------------------ |
        | widget  | 是   | obj    | 按钮对象            |
        | color   | 是   | string | 描边色值（#000000） |
        | outline | 是   | int    | 描边大小            |

        `
    },
    {
        "label": "Button_titleDisableOutLine",
        "insertText": dedent`
        GUI:Button_titleDisableOutLine(\${1:widget})
        `,
        "documentation": dedent`# 取消按钮文本描边
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 按钮对象 |

        `
    },
    {
        "label": "Button_setBright",
        "insertText": dedent`
        GUI:Button_setBright(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮是否禁用
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释               |
        | :----- | :--- | :--- | :----------------- |
        | widget | 是   | obj  | 按钮对象           |
        | value  | 是   | bool | 是否禁用（可触摸） |

        `
    },
    {
        "label": "Button_setBrightEx",
        "insertText": dedent`
        GUI:Button_setBrightEx(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮是否禁用（不可触摸）
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释                 |
        | :----- | :--- | :--- | :------------------- |
        | widget | 是   | obj  | 按钮对象             |
        | value  | 是   | bool | 是否禁用（不可触摸） |

        `
    },
    {
        "label": "Button_setBrightStyle",
        "insertText": dedent`
        GUI:Button_setBrightStyle(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮状态
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释                |
        | :----- | :--- | :--- | :------------------ |
        | widget | 是   | obj  | 按钮对象            |
        | value  | 是   | int  | 状态（0正常 1按下） |

        `
    },
    {
        "label": "Button_setGrey",
        "insertText": dedent`
        GUI:Button_setGrey(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置按钮是否灰态
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 按钮对象 |
        | value  | 是   | bool | 是否灰态 |

        `
    },
    {
        "label": "Button_setScale9Slice",
        "insertText": dedent`
        GUI:Button_setScale9Slice(\${1:widget}, \${2:scale9l}, \${3:scale9r}, \${4:scale9t}, \${5:scale9b})
        `,
        "documentation": dedent`# 设置按钮九宫格
        [在线文档](http://engine-doc.996m2.com/web/#/22/2159)

        | 参数    | 必选 | 类型 | 注释     |
        | :------ | :--- | :--- | :------- |
        | widget  | 是   | obj  | 按钮对象 |
        | scale9l | 是   | int  | 左边比例 |
        | scale9r | 是   | int  | 右边比例 |
        | scale9t | 是   | int  | 上边比例 |
        | scale9b | 是   | int  | 下边比例 |

        `
    },
]




export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    buttonsItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
